package miage.gestioncabinet.corem;

import java.util.Calendar;
import java.util.List;

import miage.gestioncabinet.api.Consultation;
import miage.gestioncabinet.api.Interaction;
import miage.gestioncabinet.api.Medecin;
import miage.gestioncabinet.api.Patient;
import miage.gestioncabinet.api.Produit;
import miage.gestioncabinet.api.Traitement;

public class ConsultationM implements Consultation{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -4741178284099403330L;
	private Patient patient;
	private Medecin medecin;
	private Calendar dateDebut;
	private Calendar dateFin;
	private String compteRendu;
	private List<Traitement> prescription;
	private List<InteractionM> interactions;

	@Override
	/**
	 * Comparaison de deux consultations
	 * @param Constultation o : Consultation à comparer avec la consultation courante
	 */
	public int compareTo(Consultation o) {
		return (this.patient == o.getPatient() &&
				this.medecin == o.getMedecin() &&
				this.dateDebut == o.getDebut() &&
				this.dateFin == o.getFin() &&
				this.compteRendu == o.getCompteRendu() && 
				this.prescription == o.getPrescription())
				? 1 : 0 ;
	}
	
	public boolean equals(Consultation o) {
		return (this.patient.getNom() == o.getPatient().getNom() &&
				this.patient.getPrenom() == o.getPatient().getPrenom());
	}

	@Override
	/**
	 * Affichage du Patient qui consulte
	 */
	public Patient getPatient() {
		return this.patient;
	}

	@Override
	/**
	 * Modification du Patient qui consulte
	 * @param Patient patient : valeurs du patient à modifier
	 */
	public void setPatient(Patient patient) {
		this.patient = patient;
	}

	@Override
	/**
	 * Affichage du médecin qui donne la consultation
	 */
	public Medecin getMedecin() {
		return this.medecin;
	}

	@Override
	/**
	 * Modification du médecin qui donne la consultation
	 * @param Medecin medecin : valeurs du médecin qui donne la modification
	 */
	public void setMedecin(Medecin medecin) {
		this.medecin = medecin;
	}

	@Override
	/**
	 * Affichage de la date de début de la consutlation
	 */
	public Calendar getDebut() {
		return this.dateDebut;
	}

	@Override
	/**
	 * Modification de la date de début de la consultation
	 * @param Calendar date : date de début de la consultation
	 */
	public void setDebut(Calendar date) {
		this.dateDebut = date;
	}

	@Override
	/**
	 * Affichage de la date de fin de la consutlation
	 */
	public Calendar getFin() {
		return this.dateFin;
	}

	@Override
	/**
	 * Modification de la date de fin de la consultation
	 * @param Calendar date : date de fin de la consultation
	 */
	public void setFin(Calendar date) {
		this.dateFin = date;
	}

	@Override
	/**
	 * Affichage du compte rendu de la consultation
	 */
	public String getCompteRendu() {
		return this.compteRendu;
	}

	@Override
	/**
	 * Modification du compte rendu de la consultation
	 */
	public void setCompteRendu(String texte) {
		this.compteRendu = texte;
	}

	@Override
	/**
	 * Affichage de la prescription de la consultation
	 */
	public List<Traitement> getPrescription() {
		return this.prescription;
	}

	@Override
	/**
	 * Ajout d'un médicament au traitement de la consultation
	 * @param Produit produit : médicament à ajouter
	 */
	public Boolean ajouterTraitement(Produit produit) {
		TraitementM t = new TraitementM();
		t.setProduit(produit);
		return this.prescription.add(t);
	}

	@Override
	/**
	 * Suppression du traitement
	 * @param Traitement medicament : médicament à supprimer
	 */
	public Boolean supprimerTraitement(Traitement medicament) {
		return this.prescription.remove(medicament);
	}

	@Override
	/**
	 * Affichage des intéractions de la consultation
	 */
	public List<Interaction> getInteractions() {
		return null;
	}

	@Override
	/**
	 * Modification des intéractions de la consultation
	 * @param List<Interaction> interactions : intéractions de la consultation
	 */
	public void setInteractions(List<Interaction> interactions) {
		//TODO
	}

	public String toString() {
		return this.patient.getPrenom() + " " + this.patient.getNom();
	}

	public Calendar getDateDebut() {
		return dateDebut;
	}

	public void setDateDebut(Calendar dateDebut) {
		this.dateDebut = dateDebut;
	}

	public Calendar getDateFin() {
		return dateFin;
	}

	public void setDateFin(Calendar dateFin) {
		this.dateFin = dateFin;
	}

	public void setPrescription(List<Traitement> prescription) {
		this.prescription = prescription;
	}
	
	/**
	 * Modification des intéractions de la consultation
	 * @param List<Interaction> interactions : intéractions de la consultation
	 */
	public void setInteraction(List<InteractionM> interactions) {
		this.interactions = interactions;
	}
}
